package main

import (
	"fmt"
)

//derfer 调用时值是实时解析的
func f1() int {
	x := 5
	defer fmt.Println(x)
	x++
	defer fmt.Println(x)
	return 0
}

//defer 调用时是先入后出的
func f2() {
	defer fmt.Println("哈哈哈")
	defer fmt.Println("嘻嘻嘻嘻")
}

//defer 可以读取有名字的返回值，没有名字的无法读取
func f3() (x int) {
	defer func() {
		x++
	}()

	return x
}

func f4() int {
	x := 0
	defer func() {
		x++
	}()
	return x
}

func main() {
	fmt.Println(f1())
	f2()
	fmt.Println(f3())
	fmt.Println(f4())
}
